module.exports = {
  // 測試環境
  testEnvironment: 'jsdom',
  
  // 測試文件匹配模式
  testMatch: [
    '<rootDir>/tests/**/*.test.ts',
    '<rootDir>/tests/**/*.test.js',
    '<rootDir>/tests/**/*.spec.ts',
    '<rootDir>/tests/**/*.spec.js'
  ],
  
  // 測試文件忽略模式
  testPathIgnorePatterns: [
    '/node_modules/',
    '/unpackage/',
    '/dist/'
  ],
  
  // 模塊文件擴展名
  moduleFileExtensions: [
    'ts',
    'tsx',
    'js',
    'jsx',
    'json',
    'vue'
  ],
  
  // 轉換器配置
  transform: {
    '^.+\\.(ts|tsx)$': 'ts-jest',
    '^.+\\.(js|jsx)$': 'babel-jest',
    '^.+\\.vue$': '@vue/vue3-jest'
  },
  
  // 模塊名稱映射
  moduleNameMapping: {
    '^@/(.*)$': '<rootDir>/$1',
    '^~/(.*)$': '<rootDir>/$1'
  },
  
  // 設置文件
  setupFilesAfterEnv: [
    '<rootDir>/tests/setup.ts'
  ],
  
  // 收集覆蓋率
  collectCoverage: true,
  collectCoverageFrom: [
    'utils/**/*.{ts,js}',
    'stores/**/*.{ts,js}',
    'components/**/*.vue',
    '!**/*.d.ts',
    '!**/node_modules/**'
  ],
  
  // 覆蓋率報告目錄
  coverageDirectory: 'coverage',
  
  // 覆蓋率報告格式
  coverageReporters: [
    'text',
    'lcov',
    'html'
  ],
  
  // 測試超時時間
  testTimeout: 10000,
  
  // 全局變量
  globals: {
    'ts-jest': {
      tsconfig: 'tsconfig.json'
    }
  }
}
